#include <stdio.h>
#include <string.h>

#define N	10
#define M	5

int get_string(char s[], int n);
long mystrlen(char s[]);
int mystrcpy(char dest[], char src[], int size);
int mystrcmp(char s1[], char s2[]);
int mystrcat(char dest[], char src[], int size);

int main(void)
{
	/*char str[N];
	char arr[M];
	int ret;

	get_string(str, N);
	// 输出字符串
	puts(str);

	printf("字符串的长度:%ld\n", mystrlen(str));
	printf("c标准库函数字符串长度:%ld\n", strlen(str));

	// 复制
	mystrcpy(arr, str, M);
	puts(arr);

	// 比较
	get_string(arr, M);	
	get_string(str, N);
	ret = mystrcmp(arr, str);
	if (0 == ret) {
		printf("相等\n");
	} else if (0 < ret) {
		printf("%s大于%s\n", arr, str);
	} else {
		printf("%s大于%s\n", str, arr);
	}
*/
	//cat
	char arr1[N];
	char arr2[M];

	get_string(arr1, N);
	get_string(arr2, M);
	puts(arr1);
	puts(arr2);

	mystrcat(arr1, arr2, N - strlen(arr1)-1);
	puts(arr1);

	return 0;
}

/*
  读入一行字符串(一定有'\0'的位置)，到'\n'为一行。存储在s数组中，最多能存储n个
  成功返回0
 */
int get_string(char s[], int n)
{
	int i;

	for (i = 0; i < n - 1; i++) {
		scanf("%c", &s[i]);
		if (s[i] == '\n')
			break;
	}
	
	// 如果一行没读完（空间不够） 吸收掉遗留的字符
	while (s[i] != '\n') {
		if (getchar() == '\n')	
			break;
	}

	// 遇到'\n' 或者读满了
	for (; i < n; i++)
		s[i] = '\0';

	return 0;
}

/*
 实现求得字符串长度
 	存储字符串的数组无需指定数组容量
 */
long mystrlen(char s[])
{
	long i;

	for (i = 0; s[i]; i++)
		;
	return i;	
}

/*
 字符串的复制
dest:目标数组
src:要复制的字符串所在数组
size:目标数组的大小
 */
int mystrcpy(char dest[], char src[], int size)
{
	int i;

	for (i = 0; i < size - 1 && src[i]; i++) {
		dest[i] = src[i];
	}
	// dest还没'\0'
	for (; i < size; i++)
		dest[i] = '\0';

	return 0;
}

/*
 字符串的大小
 	s1 == s2相等 return 0;
	s1 > s2 return 大于0
	s1 < s2 return 小于0
 */
int mystrcmp(char s1[], char s2[])
{
	int i;

	i = 0;
	while (s1[i] == s2[i] && s1[i])
		i++;
	return s1[i] - s2[i];	
}

int mystrcat(char dest[], char src[], int size){
	int i;
	int dest_len = strlen(dest);
	int src_len = strlen(src);

	for(i = 0; i < size && i < src_len ;i++){
		dest[dest_len + i] = src[i];
	}
	dest[dest_len + i] = '\0';
	return 0;
}



